#include "uni_hal_gpio.h"
#include "DrvUART010.h"


/***************************************************************
gpio:
   gpionum(0-31)
gpioN_irq_cb:
   callback function of this gpionum
****************************************************************/
int uni_hal_gpio_irq_cfg(int gpionum, int type, gpio_interrupt_cb gpioN_irq_cb)
{
	if(gpioN_irq_cb != NULL){
		gpio_callback[gpionum].func = gpioN_irq_cb;
	}else{
		fLib_printf("uni_hal_gpio_init failed! param gpioX_irq_cb is NULL!\n");
		return -1;
	}
	uni_gpio_isr_cfg(gpionum, type);
	uni_gpio_isr_enable(1, gpionum);
	return 0;
}

/***************************************************************
gpio:
   gpionum(0-31)
****************************************************************/
int uni_hal_gpio_irq_clear(int gpionum)
{
	gpio_callback[gpionum].func = NULL;
	uni_gpio_isr_enable(0, gpionum);
	return 0;
}

/***************************************************************
gpio:
   gpionum(0-31)
****************************************************************/
int uni_hal_gpio_irq_enable(int gpionum)
{
	uni_gpio_isr_enable(1, gpionum);
	return 0;
}

/***************************************************************
gpio:
   gpionum(0-31)
value:
   this gpio pin status will be set into
****************************************************************/
void uni_hal_gpio_set_value(int gpionum, int value)
{
	uni_set_gpio_dir(gpionum, 1);
	uni_set_gpio_value(gpionum, value);
}

/***************************************************************
gpio:
   gpionum(0-31)
value:
   this gpio pin input status
****************************************************************/
void uni_hal_gpio_get_value(int gpionum, int *value)
{
	uni_set_gpio_dir(gpionum, 0);
	uni_get_gpio_value(gpionum, value);
}

/***************************************************************
gpio:
   gpionum(0-31)
pull_mode:
   0:pull_down, 1:pull_up, 2:not_pull
****************************************************************/
void uni_hal_gpio_set_pull_mode(int gpionum, int pull_mode)
{
	uni_set_gpio_pull_mode(gpionum, pull_mode);
}

